package com.shycloud.mido.member.api.util;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.List;
import java.util.Objects;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.shycloud.mido.member.api.vo.AtvMainActiveRespVO;
import com.shycloud.mido.member.api.vo.MemberActivateEntityResp;

import cn.hutool.core.collection.CollectionUtil;

public class DisplayConversionUtil {
	/**
	 * 首页显示转化 显示状态1-报名中2-比赛明日开启3-XXX挑战赛第几天
	 * @param result
	 */
	public static void transform(IPage<AtvMainActiveRespVO> result) {
		if (Objects.nonNull(result) && CollectionUtil.isNotEmpty(result.getRecords())) {
			List<AtvMainActiveRespVO> records = result.getRecords();
			records.forEach(DisplayConversionUtil::transformOne);
		}
	}
	
	public static void transformOne(AtvMainActiveRespVO item) {
		if (Objects.nonNull(item)) {
				if (Objects.isNull(item.getBeginDatetime())) {
					//活动没开始 或者 开始时间小于当前时间 --报名中
					item.setDisplayStatus("1");
					
				}else {
					//活动明天开始
					//如果差一天开始 录入时间=现在加一天 --- 明天开启  
					Date beginDatetime = item.getBeginDatetime();
					LocalDate beginDate = beginDatetime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
					if (beginDate.equals(LocalDate.now().plusDays(1))) {
						item.setDisplayStatus("2");
						return;
					}
					//活动已经开始   --第几天
					long days = ChronoUnit.DAYS.between(beginDate , LocalDate.now());
					item.setDisplayStatus("3");
					item.setDisplayStatusText(String.valueOf(days+1));
					
					//活动结束
					Date endDatetime = item.getEndDatetime();
					if (Objects.nonNull(endDatetime)) {
						LocalDate endDate = endDatetime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
						if (endDate.equals(LocalDate.now().minusDays(1))) {
							item.setDisplayStatus("4");
						}
					}
				}
		}
	}
	
	public static void displayRecordsConversion(MemberActivateEntityResp item) {
		//如果期限是0则是永久
		item.setActiveStartTime(item.getStartTime());
		int duration = item.getDuration();
		//duration 0 永久
		if (0 != duration) {
			LocalDateTime endtimeDT = item.getActiveStartTime().plusDays(duration);
			item.setActiveEndTime(endtimeDT);
		}
	}
}
